package com.slg.controller;

import cn.hutool.crypto.digest.MD5;
import com.slg.commons.ImageVerificationCode;
import com.slg.entity.JsonResponse;
import com.slg.entity.Result;
//import com.slg.entity.pojo.User;
//import com.slg.entity.vo.UserVo;
//import com.slg.service.UserService;
import com.slg.entity.pojo.Employee;
import com.slg.service.AdminiService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.web.bind.annotation.*;

import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.Base64;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
import java.util.concurrent.TimeUnit;

@Slf4j
@RestController
@RequestMapping("/user")
public class UserController {
//    注入StringRedisTemplate模板
    @Autowired
    StringRedisTemplate redisTemplate;

    @Autowired
    AdminiService adminiService;
    /*
    *
    * 登录接口
    *
    * 通过用户名查询用户，---返回一个用户数组
    *
    * 判断此用户数据是否为空===提示账号是否存在
    *
    * 对前端用户输入的密码进行md5加密
    *
    * 用查到的数据密码和用户传输的密码作比对，===密码是否正确
    *
    * 判断验证码
    * 将用户传输的验证码和用户传输的redisKey查询到的验证码作对比===验证码是否正确
    *
    * 生成token令牌，将令牌和查询到的用户一起返回给前端
    * */

    @GetMapping("/login")
    public JsonResponse login( Employee employee){
        Employee employee1= adminiService.login(employee);
//        if(employee==null){
//            return JsonResponse.error(Result.LOGIN_ERROR.code,Result.LOGIN_ERROR.msg,"账号不存在！");
//        }
//        if(!employee.getPassword().equals( MD5.create().digestHex(userVo.getPassword()))){
//            return JsonResponse.error(Result.LOGIN_ERROR.code,Result.LOGIN_ERROR.msg,"密码错误");
//        }
//
//
//        if(!userVo.getCode().equalsIgnoreCase(redisTemplate.opsForValue().get(redisKey))){
//            return JsonResponse.error(Result.LOGIN_ERROR.code,Result.LOGIN_ERROR.msg,"验证码错误");
//        }


        return JsonResponse.success(employee1);

    }


    @GetMapping("/getCode")
    public JsonResponse getCode(){
        Map<String,String> map=new HashMap<>();
    //获取验证码的图片
        ImageVerificationCode verificationCode=new ImageVerificationCode();
        BufferedImage image = verificationCode.getImage();
        //获取验证码信息并且存储到redis缓存数据库中
        String text = verificationCode.getText();
        String codeId = UUID.randomUUID().toString().replaceAll("-","");
        redisTemplate.opsForValue().set("code:"+codeId,text);

//        给验证码设置一分钟的有效期
        redisTemplate.expire("code:"+ codeId, 1,TimeUnit.MINUTES);
//创建字节数组的输出流
        ByteArrayOutputStream outputStream=new ByteArrayOutputStream();
// 生成Base64格式的图片地址
        try {
            ImageIO.write(image,"JPEG",outputStream);
            byte[] bytes = outputStream.toByteArray();
            //生成base64的后缀
            String base64Str = "data:image/jpeg;base64," + Base64.getEncoder().encodeToString(bytes);
            map.put("base64Str",base64Str);
            map.put("redisKey","code:" + codeId);
        } catch (IOException e) {
            e.printStackTrace();
        }
        return JsonResponse.success(map);
    }

//    注册接口


//    @PostMapping("/register")
//    public  JsonResponse  register(@RequestBody Employee employee){
////        增删改都是修改表的
//        int i = adminiService.register(user);
//        if(i>0) return JsonResponse.success("用户注册成功，请注意邮件查收,点击激活此用户");
//        else return JsonResponse.error(Result.LOGIN_ERROR.code,Result.LOGIN_ERROR.msg,"注册失败");
//
//    }

}
